# ============================================================================
# sccache 专用配置模块（解决 PDB 冲突）
# ============================================================================
# 本模块确保在使用 sccache + Ninja + MSVC 时不会出现 PDB 文件冲突
# ============================================================================

if(WIN32 AND MSVC)
    # 检测是否使用了 sccache
    if(CMAKE_C_COMPILER_LAUNCHER MATCHES "sccache" OR CMAKE_CXX_COMPILER_LAUNCHER MATCHES "sccache")
        message(STATUS "========================================")
        message(STATUS "应用 sccache 专用优化配置")
        message(STATUS "========================================")
        
        # 🔥 核心修复：使用 /Z7 代替 /Zi
        # /Zi: 生成单独的 .pdb 文件 → 多进程冲突
        # /Z7: 调试信息嵌入 .obj → 无冲突
        
        # 替换所有配置的 /Zi 为 /Z7
        foreach(flag_var 
            CMAKE_C_FLAGS_DEBUG 
            CMAKE_CXX_FLAGS_DEBUG
            CMAKE_C_FLAGS_RELWITHDEBINFO
            CMAKE_CXX_FLAGS_RELWITHDEBINFO
        )
            if(${flag_var} MATCHES "/Zi")
                string(REPLACE "/Zi" "/Z7" ${flag_var}_NEW "${${flag_var}}")
                set(${flag_var} "${${flag_var}_NEW}" CACHE STRING "Flags for ${flag_var}" FORCE)
                message(STATUS "✅ ${flag_var}: /Zi → /Z7")
            endif()
        endforeach()
        
        # 添加 /FS 作为额外保护（虽然 /Z7 已经解决了问题）
        add_compile_options($<$<CONFIG:Debug>:/FS>)
        add_compile_options($<$<CONFIG:RelWithDebInfo>:/FS>)
        
        message(STATUS "")
        message(STATUS "优化效果:")
        message(STATUS "  ✅ 避免 PDB 文件访问冲突")
        message(STATUS "  ✅ 支持无限并行编译")
        message(STATUS "  ✅ 完整的调试功能")
        message(STATUS "========================================")
    endif()
endif()

